#ifndef	_UES_OBJECT_
#define	_UES_OBJECT_

// CAST TYPES
#define UES_CAST_PTR					'p'
#define UES_CAST_STRING					's'
#define UES_CAST_INT					'i'
#define UES_CAST_FLOAT					'f'
#define UES_CAST_FUNCTION				'F'
#define UES_CAST_OBJ					UES_CAST_PTR
#define	UES_CAST_DATA					'D'
#define UES_CAST_REGISTER				'R'
#define UES_CAST_OFFSET_REGISTER		'o'
#define UES_CAST_STRUCT					'S'
#define UES_CAST_SINGLE_DEF				'd'
#define UES_CAST_ARRAY					'a'

// Memory spots
typedef struct ues_mem_s
{
	void *memptr;
	unsigned char cast;
	unsigned char size;
	unsigned char isStatic;
	unsigned char isAlloced;
	unsigned char isArgument;
	//unsigned short usDefID;				// If its casted as a definition, this identifies the def
} ues_mem_t;

// Init
ues_mem_t*	UES_Object_Alloc(unsigned char type);
void		UES_Object_Destroy(ues_mem_t *obj);
// Object Functions
size_t		UES_Object_GetSize(ues_mem_t *pObj);
void		UES_Object_SetData(ues_mem_t *obj, void *dptr, unsigned int size);
void*		UES_Object_GetData(ues_mem_t *obj);
ues_mem_t*	UES_Object_Copy(ues_mem_t *obj);

#endif //_UES_OBJECT_